home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / stdio / fopen.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  1KB  |  36 lines

  1. #include <stddef.h>
  2. #include <stdio.h>
  3. #include <limits.h>
  4. #include <stdarg.h>
  5. #include <stdlib.h>
  6.  
  7. #include <dos/dos.h>
  8. #include <proto/dos.h>
  9.  
  10. extern FILE *_firstfile,*_lastfile;
  11.  
  12. FILE *fopen(const char *name,const char *mode)
  13. {
  14.     FILE *f;long amigamode=0;int append;
  15.     if(*mode=='w') amigamode=MODE_NEWFILE; else amigamode=MODE_OLDFILE;
  16.     if(*mode=='a') append=1; else append=0;
  17.     if(!(f=malloc(sizeof(FILE)))) return(0);
  18.     f->count=0;
  19.     f->base=0;
  20.     f->bufsize=0;
  21.     f->next=0;
  22.     if(*mode=='r') f->flags=_READABLE; else f->flags=_WRITEABLE;
  23.     if(*++mode=='b') mode++;
  24.     if(*mode=='+') {f->flags|=_READABLE|_WRITEABLE;amigamode=MODE_READWRITE;}
  25.     f->filehandle=(char *)Open((STRPTR)name,amigamode);
  26.     if(!f->filehandle){free(f);return(0);}
  27.     if(IsInteractive((BPTR)f->filehandle)) f->flags|=_LINEBUF;
  28.     if(_lastfile){
  29.         _lastfile->next=f;f->prev=_lastfile;_lastfile=f;
  30.     }else{
  31.         _firstfile=_lastfile=f;
  32.     }
  33.     if(append) fseek(f,0,SEEK_END);
  34.     return(f);
  35. }
  36.